#include <stdio.h>

int main()
{
    printf("sizeof(char) = %d\n", sizeof(char));
    printf("sizeof(int) = %d\n", sizeof(int));
    printf("sizeof(short) = %d\n", sizeof(short));
    printf("sizeof(long) = %d\n", sizeof(long));
    printf("sizeof(long long) = %d\n", sizeof(long long));
    printf("sizeof(float) = %d\n", sizeof(float));
    printf("sizeof(double) = %d\n", sizeof(double));

    struct A
    {
        char a;
        int b;
        char c;
    } node;
    printf("sizeof(node) = %d\n", sizeof(node));
    // 按照顺序存储结构体成员 axxx xxxx xxxx
    // 第一个成员 从索引0开始
    // 后续的所有成员要考虑地址对齐 地址位置必须是 成员大小的整数倍（成员地址对齐）
    // 结构体的总大小 结构体成员中最大的那个成员类型的整数倍（对齐）

    struct B
    {
        char a;
        char b;
        int c;
    } node2;
    printf("sizeof(node2) = %d\n", sizeof(node2)); // 8
    // a b--- xxxx
    // 结构体大小与成员顺序无关

    struct C
    {
        int b;
        char a;
        long long d;
        char c;
    } node3;
    printf("sizeof(node3) = %d\n", sizeof(node3)); // 24
    // bbbb a--- dddd dddd c--- ----

    struct D
    {
        char a;
        int b;
        char c;
        double d;
    } node4;
    printf("sizeof(node4) = %d\n", sizeof(node4)); // 16
    // a--- bbbb c--- ---- dddd dddd
}